package utils

import (
	"fmt"
	"net"
)

func GetIPAddress(inter string) (string, error) {
	// 获取所有网络接口
	ifaces, err := net.Interfaces()
	if err != nil {
		return "", err
	}

	// 遍历所有网络接口
	for _, iface := range ifaces {
		// 检查接口是否启用
		if iface.Flags&net.FlagUp == 0 {
			continue
		}

		// 检查接口是否为回环接口
		if iface.Flags&net.FlagLoopback != 0 {
			continue
		}

		// 获取接口的地址
		addrs, err := iface.Addrs()
		if err != nil {
			continue
		}

		// 遍历接口的地址
		for _, addr := range addrs {
			// 检查地址是否为IP地址
			if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
				if ipnet.IP.To4() != nil {
					// 检查是否为指定接口
					if inter == "" {
						return ipnet.IP.String(), nil
					} else if iface.Name == inter {
						return ipnet.IP.String(), nil
					}
				}
			}
		}
	}

	return "", fmt.Errorf("未找到指定接口的IP地址")
}
